package main

import (
	"fmt"
	"gormdemo/database"
	"gormdemo/query"

	"gorm.io/gorm"
)

type Product struct {
	gorm.Model
	Code  string
	Price uint
}

// 不使用生成的代码  直接运行
func demo1() {
	db := database.NewDatabase()
	// defer conn.Close()

	//自动检查 Product 结构是否变化，变化则进行迁移
	db.AutoMigrate(&Product{})

	// 增
	db.Create(&Product{Code: "L1212", Price: 1000})

	// 查   默认会过滤调软删除的记录
	var product Product
	db.First(&product, 1)                   // 找到id为1的产品
	db.First(&product, "code = ?", "L1212") // 找出 code 为 l1212 的产品

	// 改 - 更新产品的价格为 2000
	db.Model(&product).Update("Price", 2000)

	// 删 - 删除产品
	db.Delete(&product)
}

func main() {
	db := database.NewDatabase()
	u := query.Use(db).Product

	// fmt.Println(u)

	product, err := u.Where(u.ID.Eq(5)).First()
	if err == nil {
		fmt.Println(product)
	}

	// u.WithContext(ctx).Select(u.Name, u.Age).Create(&user)
	// // INSERT INTO `users` (`name`,`age`) VALUES ("modi", 18)

	// user, err := u.Where(u.Name.Eq("iDer")).First()
	// SELECT * FROM users WHERE name = "iDer" and age>=18;

	// _, err := u.WithContext(ctx).Where(u.ID.Eq(12)).Update(u.Name, "jinzhu")
	// // UPDATE users SET name="jinzhu", updated_at='2013-11-17 21:34:10' WHERE id=12;

	// e.WithContext(ctx).Where(u.ID.Eq(10)).Delete()
	// // DELETE from users where id = 10;

	// orders, err := o.WithContext(ctx).Where(u.Columns(o.Amount).Gt(o.Select(u.Amount.Avg())).Find()
	// // SELECT * FROM "orders" WHERE amount > (SELECT AVG(amount) FROM "orders");
}
